/**
 * 题目:
 * 实现⼀个⽅法 sameNumbers ，找出同时存在于两个数组的所有数字。
 * 
 * 描述:
 * 需要处理异常传参，情况不限于：
 * - 未传⼊arr1或arr2
 * - arr1或arr2不是数组
 * 字符串格式的数字需要转为数字，如： '1' 需先转化为 1 再进⾏查重⽐较
 * 返回结果需要过滤所有⾮数字项
 * 
 * 示例:
 * sameNumbers([1, 5, 6], [2, 6, 7]) // [6]
*/

function sameNumbers(arr1, arr2) {
  // 检查arr1 和 arr2是否为数组
  if (!arr1 || !arr2 || !Array.isArray(arr1) || !Array.isArray(arr2)) {
    throw new Error('both arguments must be arrays');
  }

  // 将两个数字中字符串转换为数字
  const nums1 = arr1.map(item => Number(item)).filter(Number.isFinite)
  const nums2 = arr2.map(item => Number(item)).filter(Number.isFinite)

  const set1 = new Set(nums1);
  const set2 = new Set(nums2);

  const result = [...set1].filter(item => set2.has(item))

  return result
}

console.log(sameNumbers([1, 2, '3'], [3, '2', 4])); // 输出: [2, 3]
console.log(sameNumbers([1, 'apple'], ['apple', 2])); // 输出: []
console.log(sameNumbers(1, 2)); // Uncaught Error: both arguments must be arrays
